﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using RootModel = GameStepAzure.Models;
using AdminModel = GameStepAzure.Areas.Admin.Models;
using GameStepAzure.Models;
namespace GameStepAzure.Areas.Admin.Models
{
    public class CatalogoProductos : IFachadaCatalogoProductos
    {
        public void AgregarInventario(RootModel.Inventario inventario, String path)
        {
            Tuple<string, string> t;
            string idImage = "0";
            String pathImagen ="";
            using (GameStoreEntities context = new GameStoreEntities())
            {
              
                pathImagen= ImagenPath(inventario, path, idImage);
                context.Inventario.AddObject(GameStoreMapper.InventarioModelToEntity(inventario));
                context.SaveChanges();

            }
            inventario.Producto.Imagen.SaveAs(pathImagen);
          


        }

        private String ImagenPath(RootModel.Inventario inventario, String path, string idImage)
        {

            path += "\\" + inventario.Producto.Consola;
        
            int tipo = (int)inventario.Producto.Tipo;
            if (tipo == 0 || tipo == 2)
            {
                path += "\\" + "accesorios";
            }
            else
            {
                path += "\\" + "juegos";
            }

            if (inventario.Producto.Imagen != null)
            {
               
                
                path += "\\" + inventario.Producto.Imagen.FileName;
                inventario.Producto.PathImagen = path;
                return path;
            }
            else
            {
                return null;
            }

        }

        public List<GameStepAzure.Models.Inventario> ObtenerProductos()
        {
            List<Inventario> lst = null;
            List<GameStepAzure.Models.Inventario> productos = null;
            using (var context = new GameStoreEntities())
            {
                lst = context.Inventario.ToList();


                productos = (from producto in lst
                             select new GameStepAzure.Models.Inventario()
                             {
                                 Producto = new RootModel.Producto()
                                 {
                                     Id = producto.Productos.Id,
                                     Nombre = producto.Productos.Nombre,
                                     PathImagen = producto.Productos.PathImagen,
                                     Precio = (float)producto.Productos.Precio,
                                     PrecioDescuento = (float)producto.Productos.PrecioDescuento,
                                     Tipo = (TipoProducto)producto.Productos.Tipo,
                                     Consola = producto.Productos.Consola,
                                     Descripcion = producto.Productos.Descripcion,
                                     Genero = producto.Productos.Genero,
                                  
                                 },
                                 Id = producto.Id,
                                 Cantidad = producto.Cantidad
                             }).ToList();
            }


            return productos;

        }


        public void BorrarProducto(int Id,string pathDelete)
        {
           
        
            using (GameStoreEntities context = new GameStoreEntities())
            {
                
                Inventario i = context.Inventario.First(x => x.Id == Id);
                 Productos p = context.Productos.First(x=>x.Id==i.Producto);
                context.Productos.DeleteObject(i.Productos);
                // context.Productos.DeleteObject(p);
                int index = p.PathImagen.IndexOf("\\Imagenes");
                string dir = p.PathImagen.Substring(index+"\\Imagenes".Length);
                pathDelete += dir;
                context.SaveChanges();

               
                System.IO.File.Delete(pathDelete);
                //System.IO.File.Delete(p.PathImagenThumb);

            }
        }




        public void ActualizarProducto(RootModel.Inventario inventario, String path)
        {
            using (GameStoreEntities context = new GameStoreEntities())
            {

                String pathImagen = ImagenPath(inventario, path, inventario.Producto.Id.ToString());
                AdminModel.Inventario inventarioActualizar = context.Inventario.First(x => x.Id == inventario.Id);
                inventarioActualizar.Cantidad = inventario.Cantidad;
                inventarioActualizar.Productos.Consola = inventario.Producto.Consola;
                inventarioActualizar.Productos.Descripcion = inventario.Producto.Descripcion;
                inventarioActualizar.Productos.Genero = inventario.Producto.Genero;
                inventarioActualizar.Productos.Nombre = inventario.Producto.Nombre;
                if (pathImagen != null)
                {
                    inventarioActualizar.Productos.PathImagen = pathImagen;
                 

                }


                inventarioActualizar.Productos.Precio = inventario.Producto.Precio;
                inventarioActualizar.Productos.PrecioDescuento = inventario.Producto.PrecioDescuento;
                inventarioActualizar.Productos.Tipo = (int)inventario.Producto.Tipo;




                context.SaveChanges();

                if (inventario.Producto.Imagen != null) {
                    inventario.Producto.Imagen.SaveAs(inventario.Producto.PathImagen);
                }
            }

           
        }

        public RootModel.Inventario ObtenerProducto(int Id)
        {
            Inventario inventarioEntity = null;
            RootModel.Inventario inventario = null;
            using (GameStoreEntities context = new GameStoreEntities())
            {

                inventarioEntity = context.Inventario.First(x => x.Id == Id);
                inventario = GameStoreMapper.InventarioEntityToModel(inventarioEntity);
            }

            return inventario;
        }

        public void AgregarProductoCarrito(string userId, List<RootModel.ProductoCarrito> productoscarrito)
        {
            using (GameStoreEntities context = new GameStoreEntities())
            {
                Guid uid = new Guid(userId);

                ProductoCarrito pc;
                foreach (RootModel.ProductoCarrito data in productoscarrito)
                {
                    pc = new ProductoCarrito();

                    pc.user_id = uid;
                    pc.producto_id = data.Producto.Id;
                    pc.cantidad = data.Cantidad;

                    if (context.ProductoCarrito.ToList().Find(o => o.user_id.Equals(uid) && o.producto_id == pc.producto_id) == null)
                    {
                        context.AddToProductoCarrito(pc);

                        context.SaveChanges();
                    }
                }

                context.AcceptAllChanges();
            }
        }
    }
}